package com.dao;

import java.util.Date;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.beans.CompteRenduActivite;
import com.beans.Entrees;
import com.beans.Projets;
import com.beans.Users;
import com.utils.HibernateUtils;

public class CompteRenduActivitesDao {

	public CompteRenduActivitesDao() {
		super();
	}
	
	// méthode permettant de lister les comptes rendus 

			public List<CompteRenduActivite> selectAllCra() {
				CompteRenduActivite cra = new CompteRenduActivite();
				Session session = HibernateUtils.currentSession();
				Query query = session.createQuery("from CompteRenduActivite");
				List<CompteRenduActivite> listCra = query.list();
				for (int i = 0; i < listCra.size(); i++) {
					cra = listCra.get(i);
					System.out.println(cra);
				}
				return listCra;
			}
	public void addCra(CompteRenduActivite cra) {

		Session session = HibernateUtils.currentSession();

		Transaction tx = session.beginTransaction();

		session.save(cra);

		tx.commit();
		HibernateUtils.closeSession();

	}

	public CompteRenduActivite findCra(Date craDateCreate) {

		Session session = HibernateUtils.currentSession();

		Query query = session.createQuery("from CompteRenduActive where craDateCreate='"
				+craDateCreate+ "'");
		List<CompteRenduActivite> listCra= query.list();

		HibernateUtils.closeSession();

		return listCra.get(0);

	}

	
	public boolean updateCra(CompteRenduActivite cra) {
		boolean updated = false;
		Transaction tx = null;
		try {
			Session session = HibernateUtils.currentSession();// ouverture d'une
			// session

			tx = session.beginTransaction();// on ouvre une transaction

			session.update( cra);
			updated = true;

		} catch (Exception e) {
			System.out.println("error lors de la modification du cra "
					+ e.getLocalizedMessage());
		} finally {
			tx.commit();
			HibernateUtils.closeSession();
		}

		return updated;

	}

	
	// methode permettant la suppression d'un compte rendu
	
		public boolean deleteCra(CompteRenduActivite cra) {
			boolean deleted = false;
			Transaction tx = null;
			try {
				Session session = HibernateUtils.currentSession();// ouverture d'une session

				tx = session.beginTransaction();// on ouvre une transaction

				session.delete(cra);
				deleted = true;

			} catch (Exception e) {
				System.out.println("error lors de la suppression du compte rendu "
						+ e.getLocalizedMessage());
			} finally {
				tx.commit();
				HibernateUtils.closeSession();
			}

			return deleted;

		}
		
		public List<CompteRenduActivite> loadUserCR(Users userLog, Date deb, Date fin){
			Session session = HibernateUtils.currentSession();

			Query query = session.createQuery("from CompteRenduActive where craDateDeb BETWEEN "+ deb+" AND "+fin+"  AND userLog =: userLog");
			query.setParameter("userLog", userLog);
			List<CompteRenduActivite> listCra= query.list();

			HibernateUtils.closeSession();

			return listCra;	
		}
		
		// les projets affectés à un  consultant 
		
		public List<Projets> mesProjets(long usrid){
			Session session = HibernateUtils.currentSession();
			Query query = session.createQuery("from Projets where usrId='"+usrid+"'");
			List<Projets> listProjets = query.list();
	        if (listProjets.size()>0)
			return listProjets;
	        else
	        	return null;
		}
		
		public List<CompteRenduActivite> mesCompteRenduActivite(long usrId){
			Session session = HibernateUtils.currentSession();
			Query query = session.createQuery("from CompteRenduActivite where usrid='"+usrId+"'");
			List<CompteRenduActivite> listCompteRenduActivite = query.list();
			 if (listCompteRenduActivite.size()>0)
			return listCompteRenduActivite;
			 else
		        	return null;
		}
		
}
